import com.sun.xml.internal.ws.addressing.WsaActionUtil;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: DELL
 * Date: 2022-07-27
 * Time: 17:16
 */
public class Test0727 {

    //条件运算符  表达式1?表达式2：表达式3
    public static void main(String[] args) {
        float a=10f;  //表达式2和表达式3必须是同类型的，除非可以发生类型的隐式类型转换
        int b=5;
        float max=a>b?a:b;  //  表达式不能单独存在，可以用一个值接收
        System.out.println(max);
    }
    //移位运算  <<  >>  >>>
    public static void main8(String[] args) {
        int a=10;
        System.out.println(a<<1); // 左移操作符，最左边一位丢弃，右边补0  --  左移相当于*2
        System.out.println(a>>1); // 右移操作符，最右边一位丢弃，左边补符号位  -- 右移相当于/2
        System.out.println(a>>>1);// 无符号右移，最右边一位丢弃，左边补0 --只针对正整数
    }

    //位运算符  &  |   ^
    public static void main7(String[] args) {
        int a=10;  //0000 1010
        int b=5;   //0000 0101

        System.out.println(a&b);  // % 有0为0 ，同1为1--按位与
        System.out.println(a|b);  // | 有1为1 ，同0为0--按位或
        System.out.println(a^b);  //^ 相同为0 ,相异为1--按位取反
    }

    //逻辑运算符 && || !
    public static void main6(String[] args) {
        int a=1;
        int b=2;

        //表达式1和表达式2得类型都必须时Boolean类型

        //逻辑非
        System.out.println(!(a==b)); //a==b为 flase   ！以后为true
        System.out.println(!(a!=1)); // a！=1 为flase  ！以后为ture

        //逻辑或
        System.out.println(a==1&&b==2);  //&&两侧得表达式必须都为真即整体表达式为真
        System.out.println(a==1&&b>10);  //若&&左边表达式结果为真，结果取决于右边表达式，仍需要判断
        System.out.println(a>10&&b==2); // 若&&左边表达式为假，则右边表达式不执行，结果直接为假
        System.out.println(a>10&&b>10);
        //逻辑与
        System.out.println(a==1||b==2);  //|| 两侧得表达式必有一侧为真即整体表达式为真
        System.out.println(a==1||b>10);  //若||左边表达式结果为真，则结果为左边表达式结果，表达式2执行判断
        System.out.println(a>10||b==2); // 若||左边表达式为假，则右边表达式继续执行，结果取决于表达式右边
        System.out.println(a>10||b>10);

        //& 和 | 如果表达式结果为 boolean 时, 也表示逻辑运算. 但与 && || 相比, 它们不支持短路求值

        //两个运行都会报错

        //原本10>20为flase ,表达式2不执行，不应报错，但却报错了，表明其虽有逻辑运算，但不支持乱路求值
        System.out.println(10>20&10/0==0);
        System.out.println(10<20|10/0==0);

    }
    //关系运算符 ==  ！=  <   >  <=  >=
    public static void main5(String[] args) {
        int a=10;
        int b=20;

        //关系运算符得结果只有true 或者 false
/*        System.out.println(a==b);
        System.out.println(a!=b);
        System.out.println(a<b);
        System.out.println(a>b);
        System.out.println(a<=b);
        System.out.println(a>=b);*/

    }
    //自增 自减运算符 ++ --
    public static void main4(String[] args) {
        //混合使用时
        int a=1;
        int b=5;
        b=a++;  //混合使用时，后置++ a先使用，在++
        //b=a a=a+1
        System.out.println(a);
        System.out.println(b);

        int c=1;
        int d=5;
        d=++c;
        //c=c+1 d=c； //先++在赋值使用
        System.out.println(c);
        System.out.println(d);

        //单独使用时
/*        int a=1;
        a++; //后置++ ，此时还未使用 a变为2
        System.out.println(a++);//后置++先使用，在++，此时输出为2  输出后a++为3
        System.out.println(a);//输出3

        int b=1;
        ++b; //前置++,先++在使用，此时b++变为2
        System.out.println(++b);//先++在使用，此时b从2变为3 输出结果为++后在使用得结果 为3
        System.out.println(b);//3

        int c=1;
        c--;//后置-- 先使用在-- ,此时未使用，c--变成0
        System.out.println(c--);//c从0先--变成-1 ，在使用输出-1
        System.out.println(c);//输出-1

        int d=1;
        --d;//前置-- 先--在使用，此时d从1变成0，未使用
        System.out.println(--d);//d从0先-- 变成-1，在使用输出-1
        System.out.println(d);//输出-1*/

    }

    //增量运算符 += -= /= %= *=
    public static void main3(String[] args) {
        int a=1;
        int b=2;
        int c=3;
        int d=4;
        int e=5;

        a+=2;
        System.out.println(a); // 3
        //等同于 a=a+2;
        b-=1;
        //等同于 b=b-2
        System.out.println(b); // 1
        c/=2;
        //c=c/2
        System.out.println(c); // 1
        d%=2;
        //d=d%2
        System.out.println(d); // 0
        e*=5;
        //e=e*5
        System.out.println(e);  // 25

    }
    //取模运算  右操作数不能为0  -- 两操作数得最终结果得类型以类型大得为主，存在整形提升
    public static void main2(String[] args) {

        //正负与被除数有关 a%b 与a得正负有关
        System.out.println(10%3); //1
        System.out.println(-10%3); //-1
        System.out.println(10%-3); //1
        System.out.println(-10%-3);//-1

        //小数 负数 均可以取模
        System.out.println(9%4.5);//0.0

        System.out.println(5/2);
        System.out.println(5/2.0);
        System.out.println((float) 5/2);
        System.out.println(5/(float)2);
        System.out.println((float)(5/2));
    }

    //基本运算符 四则运算 + - * /
    public static void main1(String[] args) {
        int a=10;
        int b=3;
        double c=5.0;
        System.out.println(a+b); //13
        System.out.println(a-b); //7
        //除法得右操作数不能为0
        System.out.println(a/b); //注意a b 类型是否需要整形提升或者隐式提升
        System.out.println(a*b); //
        System.out.println(a%b);

        //存在整形提升
        System.out.println(c+a);
        System.out.println(c-b);
        System.out.println(c*b);
        System.out.println(c/b);
        System.out.println(c%b);
    }
}
